package com.design.patterns.creativeModel.bridge;

import com.design.patterns.creativeModel.bridge.Impl.Huawei;
import com.design.patterns.creativeModel.bridge.Impl.Xiaomi;
import com.design.patterns.creativeModel.bridge.Impl.platfromImpl.Alibaba;
import com.design.patterns.creativeModel.bridge.Impl.platfromImpl.JD;
import com.design.patterns.creativeModel.bridge.Impl.platfromImpl.Pdd;
import com.design.patterns.creativeModel.bridge.abstractpt.RefinedPlatfrom;

/**
 * 桥接
 * 目的：将抽象部分与它的实现部分分离，使它们都可以独立地变化。
 * 桥接模式就是为了避免直接继承带来的子类爆炸。
 */
public class BridgeMain {
    public static void main(String[] args) {
        /**
         * 我们将桥接设计模式进行抽象
         * 现在我们有三个平台 淘宝 拼多多 京东
         * 每个平台下面都有对应的品牌入住：一加 小米 华为
         * 我们如果是传统的方式的话子类会非常多：淘宝一加，淘宝小米，淘宝华为，拼多多一加。。。。。等等等
         * 而且新增品牌的话会产生大量的子类，我们现在使用桥接模式去实现它
         */
        Alibaba alibaba = new Alibaba(new Huawei());
        alibaba.shopping();
        System.out.println("--------------------------------------------");
        /**
         * 现在我们想切换平台
         */
        Pdd pdd = new Pdd(new Huawei());
        pdd.shopping();
        System.out.println("--------------------------------------------");
        /**
         * 现在我们想切换平台和换购买商品
         */
        JD jd = new JD(new Xiaomi());
        jd.shopping();
        /**
         * 总结：桥接模式实现比较复杂，实际应用也非常少，但它提供的设计思想值得借鉴，即不要过度使用继承，而是优先拆分某些部件，使用组合的方式来扩展功能。
         */
    }
}
